#ifndef _LOG_H_
#define _LOG_H_
#include <syslog.h>
#include <errno.h>
#include <stdio.h>

#ifdef DEBUG
#define LOG_LEVEL_CLSUN   4
#endif

#ifdef RELEASE
#define LOG_LEVEL_CLSUN   3
#endif

#ifndef TO_TERMINAL
#if (LOG_LEVEL_CLSUN > 3)
#define LOGD(format, ...)   syslog(LOG_DEBUG,"LOG_DEBUG-->"format, ##__VA_ARGS__)
#else
#define LOGD(format, ...)
#endif

#if (LOG_LEVEL_CLSUN > 2)
#define LOGI(format, ...)   syslog(LOG_INFO, "LOG_INFO -->"format, ##__VA_ARGS__)
#else
#define LOGI(format, ...)
#endif

#if (LOG_LEVEL_CLSUN > 1)
#define LOGE(format, ...)   syslog(LOG_ERR,  "LOG_ERR  -->"format, ##__VA_ARGS__)
#define CHECK_ERR(_TAG_,func_name,cond,label)                                                    \
                                            do{                                                              \
                                                if (cond)                                                \
                                                {                                                            \
                                                    LOGE(_TAG_"%s failed,errno = %d\r\n",func_name,errno);   \
                                                    goto label;                                              \
                                                }                                                            \
                                            }while(0)
#define RETURN_ERR(_TAG_,func_name,cond,return_or_not) do{                                                              \
                                                           if (cond)                                                \
                                                           {                                                            \
                                                               LOGE(_TAG_"%s failed,errno = %d\r\n",func_name,errno);   \
                                                               if (return_or_not) return -errno;                        \
                                                           }                                                            \
                                                       }while(0)

#define ERR_LOG(_TAG_,func_name,cond)       do{                                                              \
                                                            if (cond)                                                \
                                                            {                                                            \
                                                                LOGE(_TAG_"%s failed,errno = %d\r\n",func_name,errno);   \
                                                            }                                                            \
                                                        }while(0)
#else
#define LOGE(format, ...)
#define CHECK_ERR(_TAG_,func_name,cond,label)
#define RETURN_ERR(_TAG_,func_name,cond,return_or_not)
#define ERR_LOG(_TAG_,func_name,cond)
#endif

#if 1
#define LOG(format, ...)    syslog(LOG_ERR,  format, ##__VA_ARGS__)
#else
#define LOG(format, ...)
#endif

#endif

#ifdef TO_TERMINAL
#if (LOG_LEVEL_CLSUN > 3)
#define LOGD(format, ...)   printf("LOG_DEBUG-->"format, ##__VA_ARGS__)
#else
#define LOGD(format, ...)
#endif

#if (LOG_LEVEL_CLSUN > 2)
#define LOGI(format, ...)   printf("LOG_INFO -->"format, ##__VA_ARGS__)
#else
#define LOGI(format, ...)
#endif

#if (LOG_LEVEL_CLSUN > 1)
#define LOGE(format, ...)   printf("LOG_ERR  -->"format, ##__VA_ARGS__)
#define CHECK_ERR(_TAG_,func_name,cond,label)                                                    \
                                            do{                                                              \
                                                if (cond)                                                \
                                                {                                                            \
                                                    LOGE(_TAG_"%s failed,errno = %d\r\n",func_name,errno);   \
                                                    goto label;                                              \
                                                }                                                            \
                                            }while(0)
#define RETURN_ERR(_TAG_,func_name,cond,return_or_not) do{                                                                   \
                                                            if (cond)                                                \
                                                            {                                                            \
                                                                LOGE(_TAG_"%s failed,errno = %d\r\n",func_name,errno);   \
                                                                if (return_or_not) return -errno;                        \
                                                            }                                                            \
                                                        }while(0)
#define ERR_LOG(_TAG_,func_name,cond)       do{                                                              \
                                                            if (cond)                                                \
                                                            {                                                            \
                                                                LOGE(_TAG_"%s failed,errno = %d\r\n",func_name,errno);   \
                                                            }                                                            \
                                            }while(0)
#else
#define LOGE(format, ...)
#define CHECK_ERR(_TAG_,func_name,cond,label)
#define RETURN_ERR(_TAG_,func_name,cond,return_or_not)
#define ERR_LOG(_TAG_,func_name,cond)
#endif

#if (LOG_LEVEL_CLSUN > 0)
#define LOG(format, ...)   printf(format, ##__VA_ARGS__)
#else
#define LOG(format, ...)
#endif
#endif

#define UCAS_DEBUG_LOG LOGD("tag--> file:%s func: %s,line %d\r\n",__FILE__,__func__,__LINE__)

#endif

/*
#define LOG_TAG  "MAIN.C  "
#define LOGXX(format, ...) printf("LOG_DEBUG------  "format, ##__VA_ARGS__)
*/
